package com.diy.sigmund;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

/**
 * <pre code="class">
 * 1，最近有一个大数据量插入的操作入库的业务场景，需要先做一些其他修改操作，然后在执行插入操作，由于插入数据可能会很多，用到多线程去拆分数据并行处理来提高响应时间，如果有一个线程执行失败，则全部回滚。
 *
 * 2，在spring中可以使用@Transactional注解去控制事务，使出现异常时会进行回滚，在多线程中，这个注解则不会生效，如果主线程需要先执行一些修改数据库的操作，当子线程在进行处理出现异常时，主线程修改的数据则不会回滚，导致数据错误。
 *
 * 解决方案：使用mybatis的sqlSession控制手动提交事务
 *     </pre>
 *
 * @author ylm-sigmund
 * @since 2023/3/30 14:48
 */
@MapperScan("com.diy.sigmund.mapper")
@EnableAsync
@SpringBootApplication
public class AsyncTransactionalApplication {

    public static void main(String[] args) {
        SpringApplication.run(AsyncTransactionalApplication.class, args);
    }
}
